<?php
require_once(FWK_EXCEPTION."CustonException.class.php");
require_once(BIB_ACTIVE_RECORD);
require_once(FWK_MODEL."AbsModelDao.class.php");
require_once(FWK_MODEL."Upload.class.php");
require_once(FWK_UTIL."FormataDatas.class.php");
/**
 * Classe modelo para a estrutura da sessão do noticia que estiver logado
 *
 * @author Matheus Vieira <matheus@magle.com.br>
 * @since 1.0 - 15/02/2012
 */
class Categoria extends AbsModelDao{

	public $_table = "categoria";
	public $_id = "id_categoria";
	private $_campoSessao;
	
	public function getCampoSessaoOrdenacao(){
		return $this->_campoSessao;
	}
	public function setCampoSessaoOrdenacao($campoSessao){
		$this->_campoSessao = "order_".$campoSessao;
	}
	
	public function getOptionsCategorias(){
		$strQuery = "SELECT
						id_categoria AS 'value', nome_categoria AS 'text'
					 FROM 
				 		categoria 
				 	 WHERE id_categ_pai = 0 || id_categ_pai IS NULL";
		$arrRet = ControlDB::getAll($strQuery,0);
		return $arrRet;
	}
	public function getOptionsSubCategorias($idPai){
		$strQuery = "SELECT
						id_categoria AS 'value', nome_categoria AS 'text'
					 FROM 
				 		categoria 
				 	 WHERE id_categ_pai = ".$idPai;
		$arrRet = ControlDB::getAll($strQuery,0);
		return $arrRet;
	}
	
	public function getListaRegistros($intPag, $busca = null){
		
		//trata a busca caso a tenha
		$arrBusca = parent::trataBusca($busca);
		$inicio = ((int)$intPag) * NUM_ELEMENTOS_GRID;
		
		$strQuery = "SELECT
						c.id_categoria, c.nome_categoria, sub.nome_categoria AS id_categ_pai
					 FROM 
				 		categoria c
				 	 LEFT JOIN categoria sub ON c.id_categ_pai = sub.id_categoria ";
		if(count($arrBusca)>0){
			$strQuery .= " WHERE ";
			for($i=0; $i<count($arrBusca); $i++){
				$strQuery .= ($i == 0)?"(":"";

				$strQuery .= " c.nome_categoria LIKE '%".$arrBusca[$i]."%' OR sub.nome_categoria LIKE '%".$arrBusca[$i]."%' ";

				$strQuery .= ($i != count($arrBusca)-1)?" OR ":")";
			}
		}
		$strQuery .= " ORDER BY ".self::getOrdenacao()." LIMIT ".$inicio.", ".NUM_ELEMENTOS_GRID;
		$arrRet = ControlDB::getAll($strQuery,0);
		return $arrRet;
	}
	
	public function getCountListaRegistros($busca=null){
		//trata a busca caso a tenha
		$arrBusca = parent::trataBusca($busca);
		
		$strQuery = "SELECT 
						COUNT(*)
					 FROM 
				 		categoria c
				 	 LEFT JOIN categoria sub ON c.id_categ_pai = sub.id_categoria ";
		if(count($arrBusca)>0){
			$strQuery .= " WHERE ";
			for($i=0; $i<count($arrBusca); $i++){
				$strQuery .= ($i == 0)?"(":"";

				$strQuery .= " c.nome_categoria LIKE '%".$arrBusca[$i]."%' OR sub.nome_categoria LIKE '%".$arrBusca[$i]."%' ";

				$strQuery .= ($i != count($arrBusca)-1)?" OR ":")";
			}
		}

		$arrRet = end(ControlDB::getRow($strQuery,0));
		return $arrRet;
	}
	
	private function getOrdenacao(){
		if(isset($_SESSION[self::getCampoSessaoOrdenacao()])){
			switch ($_SESSION[self::getCampoSessaoOrdenacao()]){
				case "id_categ_pai":
					$ordenacao = "sub.nome_categoria";
					break;
				case "nome_categoria":
				default:
					$ordenacao = "c.nome_categoria";
					break;
			}
		}else{
			$_SESSION[self::getCampoSessaoOrdenacao()] = "id_categ_pai";
			$ordenacao = "sub.nome_categoria";
		}
		return $ordenacao;
	}

	public function alterar($id=null,$post,$file){
		try{
			self::salvaPostAutoUtf8($post);
			$this->id_categoria = $id;
			//campos default para todos os daos (historico de edição de arquivos)
			$this->data_alteracao = date("Y-m-d H:i:s");
			$this->id_usuario = parent::getUsuarioSessao()->getIdUsuario();
			self::replace();
			if(self::ErrorMsg()){
				print("<pre>");
				print_r($post);
				die("<br/><br /><h1>".self::ErrorMsg()."</h1>");
			}
		}catch(DaoException $e){
			throw new CustonException($e->getMensagem());
		}
	}
}
?>